package com.xdcplus.web.service.bd;

import com.xdcplus.mp.service.BaseService;
import com.xdcplus.pager.vo.PageVO;
import com.xdcplus.web.common.pojo.dto.bd.BdMaterialTypeDTO;
import com.xdcplus.web.common.pojo.dto.bd.BdMaterialTypeFilterDTO;
import com.xdcplus.web.common.pojo.entity.bd.BdMaterialType;
import com.xdcplus.web.common.pojo.vo.bd.BdMaterialTypeVO;

import java.util.List;


/**
 * 物料类型表(BdMaterialType)表服务接口层
 *
 * @author Fish.Fei
 * @since 2023-02-01 09:04:00
 */
public interface BdMaterialTypeService extends BaseService<BdMaterialType, BdMaterialType, BdMaterialTypeVO> {

    /**
     * 添加物料类型表(BdMaterialType)
     *
     * @param bdMaterialTypeDTO 物料类型表(BdMaterialTypeDTO)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveBdMaterialType(BdMaterialTypeDTO bdMaterialTypeDTO);

    /**
     * 修改物料类型表(BdMaterialType)
     *
     * @param bdMaterialTypeDTO 物料类型表(BdMaterialTypeDTO)
     * @return {@link Boolean} 是否成功
     */
    Boolean updateBdMaterialType(BdMaterialTypeDTO bdMaterialTypeDTO);

    /**
     * 批量保存或更新物料类型表(BdMaterialType)
     *
     * @param bdMaterialTypeList 物料类型表(BdMaterialTypeList)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveOrUpdateBatch(List<BdMaterialType> bdMaterialTypeList);

    /**
     * 批量保存或更新物料类型表(BdMaterialTypeDTOList)
     *
     * @param bdMaterialTypeDTOList 物料类型表(BdMaterialTypeDTOList)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveOrUpdateBatchByDTOList(List<BdMaterialTypeDTO> bdMaterialTypeDTOList);

    /**
     * 删除物料类型表(BdMaterialType)
     *
     * @param id 物料类型表(BdMaterialType)主键
     * @return {@link Boolean} 是否成功
     */
    Boolean deleteBdMaterialTypeLogical(Long id);
    
    Boolean deleteBdMaterialTypeByIds(String ids);

    /**
     * 查询物料类型表(BdMaterialType)
     *
     * @param bdMaterialTypeFilterDTO 过程状态过滤DTO
     * @return {@link PageVO<BdMaterialTypeVO>} 状态信息
     */
    List<BdMaterialTypeVO> queryBdMaterialTypeVOList(BdMaterialTypeFilterDTO bdMaterialTypeFilterDTO);

    /**
     * 查询物料类型表(BdMaterialType)
     *
     * @param bdMaterialTypeFilterDTO 过程状态过滤DTO
     * @return {@link PageVO<BdMaterialTypeVO>} 状态信息
     */
    PageVO<BdMaterialTypeVO> queryBdMaterialType(BdMaterialTypeFilterDTO bdMaterialTypeFilterDTO);

    /**
     * 查询一个
     *
     * @param id 物料类型表(BdMaterialType)主键
     * @return {@link BdMaterialTypeVO} 物料类型表(BdMaterialType)信息
     */
    BdMaterialTypeVO queryBdMaterialTypeById(Long id);

    List<BdMaterialTypeVO> queryBdMaterialTypeVOByParentId(Long parentId);

    List<BdMaterialTypeVO> queryBdMaterialTypeVOTree(Long parentId);

    PageVO<BdMaterialTypeVO> queryBdMaterialTypeVOTreeWithKeyword(BdMaterialTypeFilterDTO bdMaterialTypeFilterDTO);

    List<BdMaterialTypeVO> getAll();
}
